home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 7: Sunsite / Linux Cubed Series 7 - Sunsite Vol 1.iso / system / news / inn1.000 / inn1.4sec-linux-src.tar / inn / samples / parsecontrol < prev    next >
Text File  |  1993-01-29  |  2KB  |  106 lines

  1. #! /bin/sh
  2. ##  $Revision: 1.7 $
  3. ##  Initial parsing of control messages.
  4.  
  5. ##  =()<. @<_PATH_SHELLVARS>@>()=
  6. . /news/lib/innshellvars
  7. WRITELOG=${NEWSBIN}/writelog
  8.  
  9. AZ=ABCDEFGHIJKLMNOPQRSTUVWXYZ
  10. az=abcdefghijklmnopqrstuvwxyz
  11. FROM="`echo \"$1\" | tr ${AZ} ${az}`"
  12. REPLYTO="$2"
  13. case "$3" in
  14. "")
  15.     ARTICLE=/dev/null
  16.     ;;
  17. /*)
  18.     ARTICLE="$3"
  19.     ;;
  20. *)
  21.     ARTICLE="${SPOOL}/$3"
  22.     ;;
  23. esac
  24. PATHHOST="$4"
  25.  
  26. umask 002
  27. TEMP=${TMPDIR}/ctl$$
  28. ##  Avoid egrep bugs with empty or-patterns.
  29. test -z "${PROG}" && PROG=all
  30. ${EGREP} "^(${PROG}|all):" <${CTLFILE} >${TEMP}
  31.  
  32. ##  Get any arguments.
  33. if grep "^Control:[     ]*${PROG}" <${ARTICLE} >/dev/null 2>&1 ; then
  34.     set X `${SED} -n -e "s/^Control:[     ]*${PROG}//p" -e '/^$/q' <${ARTICLE}`
  35.     shift
  36. else
  37.     if grep "^Subject:[     ]*cmsg[     ]*${PROG}" \
  38.         <${ARTICLE} >/dev/null 2>&1 ; then
  39.     set X `${SED} -n -e "s/^Subject:[     ]*cmsg[     ]*${PROG}//p" \
  40.         -e '/^$/q' <${ARTICLE}`
  41.     shift
  42.     else
  43.     rm -f ${TEMP}
  44.     ${MAILCMD} -s "Bad header by ${FROM}" \
  45.         ${NEWSMASTER} <${ARTICLE}
  46.     exit
  47.     fi
  48. fi
  49.  
  50. ACTION=mail
  51. IFS=:
  52. exec <${TEMP}
  53. while read MESSAGE FROM_PAT NG_PAT ACT_PAT ; do
  54.     eval "case \"${FROM}\" in
  55.     ${FROM_PAT})
  56.     ##  Got a match -- if newgroup/rmgroup, must also
  57.     ##  match the newsgroup pattern.
  58.     case \"${PROG}\" in
  59.     newgroup|rmgroup)
  60.         case \"$1\" in
  61.         ${NG_PAT})
  62.         ACTION=${ACT_PAT}
  63.         ;;
  64.         esac
  65.         ;;
  66.     *)
  67.         ACTION=${ACT_PAT}
  68.         ;;
  69.     esac
  70.     ;;
  71.     esac"
  72. done
  73. rm -f ${TEMP}
  74. IFS="`echo stn | tr stn ' \011\012'`"
  75.  
  76. LOGFILE=mail
  77. case ${ACTION} in
  78. drop)
  79.     exit
  80.     ;;
  81. log)
  82.     echo "`date` Ignored ${PROG} ${ARTICLE} by ${FROM} (${PATHHOST})" 1>&2
  83.     exit
  84.     ;;
  85. log=*)
  86.     LOGFILE=`expr "${ACTION}" : 'log=[     ]*\(.*\)'`
  87.     ACTION=logit
  88.     ;;
  89. doit=*)
  90.     LOGFILE=`expr "${ACTION}" : 'doit=[     ]*\(.*\)'`
  91.     ACTION=doit
  92.     ;;
  93. esac
  94.  
  95. case "${LOGFILE}" in
  96. "")
  97.     LOGFILE=/dev/null
  98.     ;;
  99. mail|/*)
  100.     ;;
  101. *)
  102.     LOGFILE=${MOST_LOGS}/${LOGFILE}.log
  103.     ;;
  104. esac
  105. export LOGFILE
  106.